/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package ig.metrica.riesgo;

/**
 *
 * @author GGutierrez
 */
public class T {
 /*           do
            {
                if(!i.hasNext())
                    break;
                try
                {
                    PosicionEspecie posicion = (PosicionEspecie)i.next();
                    EspeciePK especiePK = posicion.getEspeciePK();
                    if(!relacionEspeciesFactores.containsKey(especiePK))
                        throw new LogicaExcepcion((new StringBuilder()).append("Falta definir el factor de riesgo para la especie ").append(especiePK.toString()).toString());
                    FactorRiesgoPersonalMetrica factor = (FactorRiesgoPersonalMetrica)relacionEspeciesFactores.get(especiePK);
                    if(factor.getTipo() == 0)
                    {
                        double var = posicion.valorEnRiesgo(fecha, factor);
                        String factorMatriz = factor.getFactorRiesgoMatrizCorrelacion().getNombre();
                        double cambioesperado = 0.0D;
                        if(factor.getTipoCalculoCambioEsperado() == 0)
                            cambioesperado = factor.getFactorRiesgoMatrizCorrelacion().getCambioEsperado();
                        else
                            cambioesperado = posicion.cambioEsperadoValoresRegistrados(fecha, factor.getDefinidorCalculoCambioEsperado());
                        pstmt1.setInt(1, ((ContratoPK)posicion.getPrimaryKey()).getIdInterna());
                        pstmt1.setDouble(2, Math.round(var * 100D) / 100L);
                        pstmt1.setString(3, factorMatriz);
                        pstmt1.setDouble(4, (double)Math.round(cambioesperado * 100000000D) / 100000000D);
                        pstmt1.executeUpdate();
                    } else
                    {
                        ManejadorFlujos flujosduracion = posicion.flujosParaDuracion(fecha);
                        TasaPK tasaPK = factor.getTasaPK();
                        if(tasaPK == null)
                            throw new DatoInvalidoExcepcion("El factor de riesgo asociado al producto no es del tipo tasa");
                        String factorMatriz = factor.getFactorRiesgoMatrizCorrelacion().getNombre();
                        Tasa tasa = null;
                        if(tasaPK.toString() != null && tasaPK.toString().trim().equals("TIPO_FACTORTASA_DESCUENTO"))
                            tasa = new TasaFactorDescuento("TIPO_FACTORTASA_DESCUENTO", "POSICIONESESPECIES", Integer.valueOf(Integer.parseInt(posicion.getPrimaryKey().toString())));
                        else
                            tasa = getTasa(tasaPK);
                        ManejadorFlujos flujosintervalo = flujosduracion.flujosEntre(fecha, isFechaInicioCerrada(), new java.util.Date((new Long("9999999999999")).longValue()), true);
                        double valorpresente = flujosintervalo.valorDescontado(tasa, fecha);
                        double duracion = flujosintervalo.duracion(fecha, tasa);
                        double cambioesperadoTasa = 0.0D;
                        Integer IDBanda = null;
                        Iterator i$ = collection.iterator();
                        do
                        {
                            if(!i$.hasNext())
                                break;
                            ZonaDTO Z = (ZonaDTO)i$.next();
                            Iterator i$ = Z.getBandas().iterator();
label1:
                            do
                            {
                                if(!i$.hasNext())
                                    break;
                                BandasDTO B = (BandasDTO)i$.next();
                                if(duracion == 0.0D && B.getNumero().equals(Integer.valueOf(1)))
                                {
                                    IDBanda = B.getId();
                                    break;
                                }
                                if(duracion <= B.getLimiteInferior().doubleValue() || duracion > B.getLimiteSuperior().doubleValue())
                                    continue;
                                Iterator i$ = B.getCollection().iterator();
                                FactorRiesgoMatrizCorrelacionMetrica F;
                                do
                                {
                                    if(!i$.hasNext())
                                        continue label1;
                                    F = (FactorRiesgoMatrizCorrelacionMetrica)i$.next();
                                } while(!F.getNombre().toUpperCase().trim().equals(factor.getFactorRiesgoMatrizCorrelacion().getNombre().toUpperCase().trim()));
                                cambioesperadoTasa = F.getCambioEsperado();
                                IDBanda = B.getId();
                            } while(IDBanda == null);
                        } while(IDBanda == null);
                        if(IDBanda == null)
                            throw new LogicaExcepcion((new StringBuilder()).append("la duracion ").append(duracion).append(" no cae en ninguna banda").toString());
                        cambioesperadoTasa /= 10000D;
                        flujosintervalo.adicionarFlujo(new Flujo(fecha, valorpresente * -1D, 0.0D, 0.0D, false, false));
                        double tir = flujosintervalo.tir();
                        Double duracionModificada = Double.valueOf(duracion / (1.0D + tir));
                        double var = valorpresente * duracionModificada.doubleValue() * cambioesperadoTasa;
                        duracion = duracionModificada.doubleValue();
                        for(Iterator i$ = collection.iterator(); i$.hasNext();)
                        {
                            ZonaDTO Z = (ZonaDTO)i$.next();
                            Iterator i$ = Z.getBandas().iterator();
                            while(i$.hasNext())
                            {
                                BandasDTO B = (BandasDTO)i$.next();
                                pstmt2.clearParameters();
                                pstmt2.setInt(1, Integer.valueOf(posicion.getPrimaryKey().toString()).intValue());
                                pstmt2.setDouble(2, IDBanda.equals(B.getId()) ? Math.round(valorpresente * 100D) / 100L : 0.0D);
                                pstmt2.setDouble(3, IDBanda.equals(B.getId()) ? (double)Math.round(duracion * 10000D) / 10000D : 0.0D);
                                pstmt2.setDouble(4, IDBanda.equals(B.getId()) ? (double)Math.round(tir * 100000000D) / 100000000D : 0.0D);
                                pstmt2.setDouble(5, IDBanda.equals(B.getId()) ? (double)Math.round(cambioesperadoTasa * 100000000D) / 100000000D : 0.0D);
                                pstmt2.setDouble(6, IDBanda.equals(B.getId()) ? Math.round(var * 100D) / 100L : 0.0D);
                                pstmt2.setString(7, factorMatriz);
                                pstmt2.setInt(8, B.getId().intValue());
                                pstmt2.executeUpdate();
                            }
                        }

                    }
                    Moneda moneda = getMoneda(posicion.getMonedaPK());
                    MonedaPK monedaPK = (MonedaPK)moneda.getPrimaryKey();
                    if(!cambioesperadoMonedas.containsKey(monedaPK))
                    {
                        if(!relacionMonedasFactores.containsKey(monedaPK))
                            throw new LogicaExcepcion((new StringBuilder()).append("Falta definir el factor de riesgo para la moneda ").append(monedaPK).toString());
                        FactorRiesgoPersonalMetrica factorMoneda = (FactorRiesgoPersonalMetrica)relacionMonedasFactores.get(monedaPK);
                        double cambioesperadoMoneda = 0.0D;
                        if(factorMoneda.getTipoCalculoCambioEsperado() == 0)
                            cambioesperadoMoneda = factorMoneda.getFactorRiesgoMatrizCorrelacion().getCambioEsperado() * moneda.obtenerValorVigenteA(fecha);
                        else
                            cambioesperadoMoneda = moneda.cambioEsperadoValoresRegistrados(fecha, factorMoneda.getDefinidorCalculoCambioEsperado());
                        cambioesperadoMonedas.put(monedaPK, new Double(cambioesperadoMoneda));
                    }
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                    if(errores.containsKey(e))
                        errores.put(e.toString(), Integer.valueOf(((Integer)errores.get(e)).intValue() + 1));
                    else
                        errores.put(e.toString(), Integer.valueOf("1"));
                }
            } while(true);
*/
}
